import csv

from datetime import datetime

import matplotlib.pyplot as plt

# filename = 'sitka_weather_07-2018_simple.csv'
filename = 'data/sitka_weather_2018_simple.csv'
with open(filename) as f:
    reader = csv.reader(f) # 阅读器对象
    header_row = next(reader) # next下一行（指针），初始的下一行是第一行
    # next(reader)会跳过reader第一行表头（类似于链表迭代至下一个节点），之后使用reader时会从表头下一行正文直接开始

    # print(header_row)


# csv_reader = reader(iterable [, dialect='excel']
#                         [optional keyword args])
#     for row in csv_reader:
#         process(row)

# The "iterable" argument can be any object that returns a line of input for each iteration, 
# such as a file object or a list. The optional "dialect" parameter is discussed below. 
# The function also accepts optional keyword arguments which override settings provided by the dialect.

# The returned object is an iterator. Each iteration returns a row of 
# the CSV file (which can span multiple input lines).


    # for index, column_header in enumerate(header_row): # enumerate:枚举
    #     print(index, column_header)

    # 从文件中获取最高温度
    dates, highs, lows = [], [], []
    for row in reader: # 遍历时自动跳过了第一行（利用next(reader)实现）
        current_date = datetime.strptime(row[2], '%Y-%m-%d') # 获取日期（第3个元素）
        high = int(row[5]) # 把每行第6(从0开始到5)个元素选出（最高温度TMAX所在列）
        low = int(row[6]) # 多加一个最低温度数据
        dates.append(current_date)
        highs.append(high) # 加入到数组中
        lows.append(low)

# print(dates)
# print(highs)

# 根据最高温度和最低温度绘制图形
plt.style.use('seaborn')
fig, ax = plt.subplots()
ax.plot(dates, highs, c='red', alpha=0.5) # alpha表示透明度，0到1从完全透明到完全不透明
ax.plot(dates, lows, c='blue', alpha=0.5) # 在一个图上绘制两个折线
ax.fill_between(dates, highs, lows, facecolor='blue', alpha=0.1) # fill_between()填充x值系列处，2个y值系列之间的位置

plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 指定默认字体（解决中文无法显示的问题）
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像时负号“-”显示方块的问题

# 设置图形的格式
# ax.set_title("2018年7月每日最高温度", fontsize=24)
# ax.set_title("2018年每日最高温度", fontsize=24)
ax.set_title("2018年每日最高/最低温度", fontsize=24)
ax.set_xlabel('', fontsize=16)
fig.autofmt_xdate() # 绘制倾斜的日期标签，避免彼此重叠
ax.set_ylabel("温度(F)", fontsize=16)
ax.tick_params(axis='both', which='major', labelsize=16) # 刻度标记数字设置，axis可选x,y轴或都选，参数which的值为 'major'、'minor'、'both'，分别代表设置主刻度线、副刻度线以及同时设置，默认值为'major'
# axis:坐标轴   tick:标记号（刻度数字）  param:参数（parameter缩写）


plt.show()